package com.briup.pts.service.impl;

import com.briup.pts.config.exception.ServiceException;
import com.briup.pts.config.property.NginxProperty;
import com.briup.pts.service.UploadService;
import com.briup.pts.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Objects;

@Slf4j
@ConditionalOnBean(NginxProperty.class)
@Service
@RequiredArgsConstructor
public class NginxUploadServiceImpl implements UploadService {

    private final NginxProperty nginxProperty;

    @Override
    public String upload(MultipartFile file) {
        log.info("本次要上传的文件为:{}",file.getOriginalFilename());
        String fileName = FileUtil.generatorFileName(Objects.requireNonNull(file.getOriginalFilename()));
        // 图片数据应该保存在什么地方？ 这个地方需要有什么要求？
        // 必须放在能够被网络请求访问的 服务器中，如我们当前的tomcat服务器
        try (FileOutputStream fos = new FileOutputStream(
                new File(nginxProperty.getBasePath(),fileName))){
            // 将数据流转换到指定为文件中
            file.getInputStream().transferTo(fos);
            fos.flush();
        }catch (IOException e){
            throw new ServiceException("文件上传失败:"+e.getMessage());
        }
        return String.format(nginxProperty.getBaseUrl(),fileName);
    }
}
